package com.example.stmp.Controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import com.example.stmp.Service.Student.StudentService;
import com.example.stmp.pojo.Result;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import com.example.stmp.Entity.Student;

/**
 * 学生控制器类，处理与学生相关的HTTP请求
 */
@Slf4j
@RestController
@RequestMapping("/Student")
public class StudentController {

    /**
     * 自动注入学生服务类，用于处理学生数据的业务逻辑
     */
    @Autowired
    private StudentService studentService;

    /**
     * 导入学生信息，通过Excel文件
     *
     * @param file 包含学生信息的Excel文件
     * @return 导入结果，成功或失败的信息
     */
    @PostMapping("/import")
    public Result importStudents(@RequestParam("file") MultipartFile file) {
        log.info("导入学生信息: {}", file.getOriginalFilename());
        try {
            studentService.importStudentsFromExcel(file);
            return Result.success("导入成功");
        } catch (Exception e) {
            return Result.error("导入失败: " + e.getMessage());
        }
    }

    /**
     * 添加新学生
     *
     * @param student 新学生的信息
     * @return 添加结果，成功或失败的信息
     */
    @PostMapping("/add")
    public Result addStudent(@RequestBody Student student) {
        log.info("添加学生: {}", student);
        studentService.addStudent(student);
        return Result.success("添加成功");
    }

    /**
     * 删除学生
     *
     * @param stId 学生ID
     * @param status 学生状态
     * @return 删除结果，成功或失败的信息
     */
    @DeleteMapping("/delete")
    public Result deleteStudent(@RequestParam String stId, @RequestParam int status) {
        log.info("删除学生: {}", stId);
        studentService.deleteStudent(stId, status);
        return Result.success("删除成功");
    }

    /**
     * 更新学生信息
     *
     * @param student 更新后的学生信息
     * @return 更新结果，成功或失败的信息
     */
    @PutMapping("/update")
    public Result updateStudent(@RequestBody Student student) {
        log.info("更新学生: {}", student);
        studentService.updateStudent(student);
        return Result.success("修改成功");
    }

    /**
     * 根据ID获取学生的信息
     *
     * @param stId 学生ID
     * @param status 学生状态
     * @return 学生信息，如果找到的话
     */
    @GetMapping("/get")
    public Result getStudentById(@RequestParam String stId, @RequestParam int status) {
        log.info("获取学生: {}", stId);
        Student student = studentService.getStudentById(stId, status);
        return Result.success(student);
    }

    /**
     * 获取所有学生的信息
     *
     * @return 所有学生的信息列表
     */
    @GetMapping("/list")
    public Result getAllStudents() {
        log.info("获取所有学生");
        List<Student> students = studentService.getAllStudents();
        return Result.success(students);
    }

    /**
     * 按条件查询学生信息
     * @param stId 学号
     * @param stName 姓名
     * @param acId 行政班ID
     * @param role 角色
     * @return 查询结果
     */
    @GetMapping("/query")
    public Result queryStudents(@RequestParam(required = false) String stId,
                                @RequestParam(required = false) String stName,
                                @RequestParam(required = false) String acId,
                                @RequestParam(required = false) String role) {
        log.info("条件查询学生: stId={}, stName={}, acId={}, role={}", stId, stName, acId, role);
        List<Student> students = studentService.queryStudents(stId, stName, acId, role);
        return Result.success(students);
    }
}
